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

📄 probe_rs232c.c

📁 lpc2478+ucosII+ucgui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*                                       uC/Probe Communication
*
*                         (c) Copyright 2007-2008; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*               Knowledge of the source code may NOT be used to develop a similar product.
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                        COMMUNICATION: RS-232
*
*                                      PORT FOR THE NXP LPC24xx
*
* Filename      : probe_rs232c.c
* Version       : V2.20
* Programmer(s) : BAN
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*/

#include  <probe_com.h>
#include  <probe_rs232.h>


/*
*********************************************************************************************************
*                                               ENABLE
*
* Note(s) : (1) See 'probe_rs232.h  ENABLE'.
*********************************************************************************************************
*/

#if (PROBE_COM_CFG_RS232_EN == DEF_ENABLED)                     /* See Note #1.                                         */


/*
*********************************************************************************************************
*                                            LOCAL DEFINES
*********************************************************************************************************
*/
                                                                /* ------------- REGISTER BASE SPECIFICATIONS ------------- */
#define  U0_BASE                ((CPU_INT32U)0xE000C000)
#define  U1_BASE                ((CPU_INT32U)0xE0010000)
#define  U2_BASE                ((CPU_INT32U)0xE0078000)
#define  U3_BASE                ((CPU_INT32U)0xE007C000)
#define  VIC_BASE               ((CPU_INT32U)0xFFFFF000)
#define  PINSEL_BASE            ((CPU_INT32U)0xE002C000)

                                                                /* ------------------ VIC PERIPHERAL IDs ------------------ */
#define  VIC_UART0                                         6
#define  VIC_UART1                                         7
#define  VIC_UART2                                        28
#define  VIC_UART3                                        29

                                                                /* ----------------------- PCLK IDs ----------------------- */
#define  PCLK_UART0                                        3
#define  PCLK_UART1                                        4
#define  PCLK_UART2                                       24
#define  PCLK_UART3                                       25

                                                                /* ------------------- PCONP BIT DEFINES ------------------ */
#define  PCUART0                                  DEF_BIT_03
#define  PCUART1                                  DEF_BIT_04
#define  PCUART2                                  DEF_BIT_24
#define  PCUART3                                  DEF_BIT_25

                                                                /* -------- CLOCKING AND POWER CONTROL REGISTER DEFINES --- */
#define  PCONP              (*(volatile CPU_INT32U *)(0xE01FC0C4))


                                                                /* ---------------- UART0 REGISTER DEFINES ---------------- */
#define  U0RBR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0000))
#define  U0THR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0000))
#define  U0DLL              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0000))
#define  U0DLM              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0004))
#define  U0IER              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0004))
#define  U0IIR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0008))
#define  U0FCR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0008))
#define  U0LCR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x000C))
#define  U0LSR              (*(volatile CPU_INT08U *)(U0_BASE     + 0x0014))

                                                                /* ---------------- UART1 REGISTER DEFINES ---------------- */
#define  U1RBR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0000))
#define  U1THR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0000))
#define  U1DLL              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0000))
#define  U1DLM              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0004))
#define  U1IER              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0004))
#define  U1IIR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0008))
#define  U1FCR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0008))
#define  U1LCR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x000C))
#define  U1LSR              (*(volatile CPU_INT08U *)(U1_BASE     + 0x0014))

                                                                /* ---------------- UART2 REGISTER DEFINES ---------------- */
#define  U2RBR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0000))
#define  U2THR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0000))
#define  U2DLL              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0000))
#define  U2DLM              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0004))
#define  U2IER              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0004))
#define  U2IIR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0008))
#define  U2FCR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0008))
#define  U2LCR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x000C))
#define  U2LSR              (*(volatile CPU_INT08U *)(U2_BASE     + 0x0014))

                                                                /* ---------------- UART3 REGISTER DEFINES ---------------- */
#define  U3RBR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0000))
#define  U3THR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0000))
#define  U3DLL              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0000))
#define  U3DLM              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0004))
#define  U3IER              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0004))
#define  U3IIR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0008))
#define  U3FCR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0008))
#define  U3LCR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x000C))
#define  U3LSR              (*(volatile CPU_INT08U *)(U3_BASE     + 0x0014))

                                                                /* ---------- PIN CONNECT BLOCK REGISTER DEFINES ---------- */
#define  PINSEL0            (*(volatile CPU_INT32U *)(PINSEL_BASE + 0x0000))
#define  PINSEL1            (*(volatile CPU_INT32U *)(PINSEL_BASE + 0x0004))
#define  PINSEL7            (*(volatile CPU_INT32U *)(PINSEL_BASE + 0x001C))

                                                                /* ----------------- VIC REGISTER DEFINES ----------------- */
#define  VICIntSelect       (*(volatile CPU_INT32U *)(VIC_BASE    + 0x000C))
#define  VICIntEnable       (*(volatile CPU_INT32U *)(VIC_BASE    + 0x0010))
#define  VICVectAddr(n)     (*(volatile CPU_INT32U *)(VIC_BASE    + 0x0100 + (4 * (n))))
#define  VICVectCntl(n)     (*(volatile CPU_INT32U *)(VIC_BASE    + 0x0200 + (4 * (n))))


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                    EXTERNAL FUNCTION PROTOTYPES
*
* Note(s)     : (1) 'BSP_CPU_PclkFreq()' should return the peripheral clock frequency in Hz of the
*                   peripheral corresponding to id 'pclk'.
*********************************************************************************************************
*/

extern  CPU_INT32U  BSP_CPU_PclkFreq  (CPU_INT08U  pclk);


/*
*********************************************************************************************************
*                                     LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/

#ifndef    PROBE_RS232_CFG_COMM_SEL

  #error  "PROBE_RS232_CFG_COMM_SEL          not #define'd in 'probe_com_cfg.h'"
  #error  "                                  [MUST be PROBE_RS232_UART_0]      "
  #error  "                                  [     || PROBE_RS232_UART_1]      "
  #error  "                                  [     || PROBE_RS232_UART_2]      "
  #error  "                                  [     || PROBE_RS232_UART_3]      "

#elif     (PROBE_RS232_CFG_COMM_SEL != PROBE_RS232_UART_0) && \
          (PROBE_RS232_CFG_COMM_SEL != PROBE_RS232_UART_1) && \
          (PROBE_RS232_CFG_COMM_SEL != PROBE_RS232_UART_2) && \
          (PROBE_RS232_CFG_COMM_SEL != PROBE_RS232_UART_3)

  #error  "PROBE_RS232_CFG_COMM_SEL    illegally #define'd in 'probe_com_cfg.h'"
  #error  "                                  [MUST be PROBE_RS232_UART_0]      "
  #error  "                                  [     || PROBE_RS232_UART_1]      "
  #error  "                                  [     || PROBE_RS232_UART_2]      "
  #error  "                                  [     || PROBE_RS232_UART_3]      "
#endif


/*
*********************************************************************************************************
*                                       ProbeRS232_InitTarget()
*
* Description : Initialize the UART for Probe communication.
*
* Argument(s) : baud_rate   Intended baud rate of the RS-232.
*
* Return(s)   : none.
*
* Caller(s)   : ProbeRS232_Init().
*
* Note(s)     : (1) Though the baud rate used may vary from application to application or target to
*                   target, other communication settings are constamt.  The hardware must always be
*                   configured for the following :
*
*                   (a) No parity
*                   (b) One stop bit
*                   (c) Eight data bits.
*
*               (2) Neither receive nor transmit interrupts should be enabled by this function.
*********************************************************************************************************
*/

void  ProbeRS232_InitTarget (CPU_INT32U baud_rate)
{
    CPU_INT16U  div;
    CPU_INT08U  divlo;
    CPU_INT08U  divhi;
    CPU_INT32U  pinsel;
    CPU_INT32U  pclk_freq;


#if (PROBE_RS232_CFG_COMM_SEL == PROBE_RS232_UART_0)
    PCONP    |= PCUART0;                                        /* Enable UART0 peripheral.                                 */

                                                                /* --------------- COMPUTE DIVISOR BAUD RATE -------------- */
    pclk_freq =  BSP_CPU_PclkFreq(PCLK_UART0);                  /* Get the CPU clock frequency                              */
    div       = (CPU_INT16U)(((2 * pclk_freq / 16 / baud_rate) + 1) / 2);
    divlo     =  div & 0x00FF;                                  /* Split divisor into LOW and HIGH bytes                    */
    divhi     = (div >> 8) & 0x00FF;

                                                                /* ------------------- ENABLE UART0 I/Os ------------------ */
                                                                /* (1) P0[2]  = Function 01b                                */
                                                                /* (2) P0[3]  = Function 01b                                */
    pinsel    = PINSEL0;
    pinsel   &= 0xFFFFFF0F;
    pinsel   |= 0x00000050;
    PINSEL0   = pinsel;

                                                                /* --------------------- SETUP UART0 ---------------------- */

⌨️ 快捷键说明

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