📄 probe_rs232c.c
字号:
/*
*********************************************************************************************************
* 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 + -