Gaël Pongnot
bd6ee3a06d
|
2 years ago | |
---|---|---|
.. | ||
README.md | 2 years ago |
README.md
${ProjName}: UART0_Terminal
Intended purpose: To demonstrate the configuration and use of the USART module, in asynchronous mode, while communicating with a terminal emulator.
Functional description:
- In this example UART0 communicates with a terminal emulator running on the PC, via a USB-to-RS232 breakout cable or via the NXP LPC11Uxx VCOM serial port.
- The user is prompted to enter a string (not to exceed 32 characters), terminated by [Enter].
- Each character that is entered is echoed back to the terminal by the UART0 ISR, and the characters are stored in an array for future use.
- When the user types [Enter], a NUL character is appended to the array, and a handshake flag is set by the ISR for the main routine.
- Upon seeing the handshake flag, the main routine prints the stored string to the terminal, and the process repeats.
External connections:
-
To use the NXP LPC11Uxx VCOM Serial Port:
- No external connections are necessary.
- The Max board must have the necessary solder-bump jumper modifications: A. For LPC812 Max board, short pins 1 and 2 of both SJ1 and SJ4 B. For LPC824 Max board, short pins 2 and 3 of SJ9 C. For LPC845 Max board, no modification is needed. C. For LPC802 LPCXpresso board, no modification is needed. C. For LPC804 LPCXpresso board, no modification is needed.
- The terminal emulator can then be connected to the NXP LPC11Uxx VCOM serial port which enumerates when the board is connected. It appears something like this: COM13: NXP LPC11Uxx VCOM serial port (COM13)
-
To use a USB-to-RS232 breakout cable:
- There are three external connections necessary: RXD and TXD based on the SWM settings, plus a ground connection. The RXD and TXD pins can be chosen in chip_setup.h. The defaults are as follows: P0.25 = U0_TXD = breakout cable RXD P0.24 = U0_RXD = breakout cable TXD Board GND = breakout cable GND
Notes on the baud rate and FRG:
- The BRG and FRG settings are calculated in two steps, as follows: // For asynchronous mode (UART mode) the formula is: // (BRG + 1) * (1 + (m/256)) * (16 * baudrate Hz.) = FRG_in Hz. // We proceed in 2 steps. // Step 1: Let m = 0, and round (down) to the nearest integer value of BRG for the desired baudrate. // Step 2: Plug in the BRG from step 1, and find the nearest integer value of m, (for the FRG fractional part). // // Step 1 (with m = 0) // BRG = ((FRG_in Hz.) / (16 * baudrate Hz.)) - 1 // = (30,000,000/(16 * 9600)) - 1 // = 194.3 // = 194 (rounded) // // Step 2. // m = 256 * [-1 + {(FRG_in Hz.) / (16 * baudrate Hz.)(BRG + 1)}] // = 256 * [-1 + {(30,000,000) / (16*9600)(195)}] // = 0.002 // = 0 (rounded)
Program Flow:
-
This example runs with: system_ahb_clk = 15 MHz. (main_clk = 15 MHz. FRO direct output) UART0CLK = 15 MHz. (FRG0CLKSEL = main_clk, FCLKSEL0 = frg0clk) See chip_setup.h and SystemInit()
-
main() routine
-
Clocks to USART0 and the SWM are enabled.
-
The SWM is configured as per above.
-
The UARTCLKDIV and the FRG (both in SYSCON) are configured as per above (for 9600 b.p.s.).
-
USART0 is given a peripheral reset.
-
USART0 BRG is configured as per above (for 9600 b.p.s.).
-
USART0 CFG register is configured for: 8 data bits no parity one stop bit no flow control asynchronous mode no loop-back
-
USART0 CTL register is configured for: no continuous break no address detect no Tx disable no CC no CLRCC
-
USART0 Rx Ready interrupt is enabled, and code execution enters the main while(1) loop.
-
The user is prompted to enter a string, and each character is echoed by the ISR back to the terminal until the NUL terminator is encountered.
-
When the NUL terminator is encountered, the ISR sets a handshake flag for main, which prints the entire received string to the terminal, and the process repeats.
-
This example runs from Flash.
To run this code:
- Build
- Program memory, then reset target or
- Debug
- Run or Go
Note: It may be necessary to power-cycle the board in order to regain control of the reset button after programming.