Difference between revisions of "Embedded System Tutorial UART"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Introduction)
 
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
Socialledge is moving to two portals. 
 +
*  The Wiki will remain here for general references about the SJ-One board, and to document student reports.
 +
*  The bookstack will now be used for SJSU assignments
 +
 +
[http://books.socialledge.com/books/embedded-drivers-real-time-operating-systems/chapter/lesson-uart This article has been moved here]
 +
 +
<!--
 
== Introduction ==
 
== Introduction ==
 
The objective of this lesson is to understand UART, and use two boards and setup UART communication between them.
 
The objective of this lesson is to understand UART, and use two boards and setup UART communication between them.
Line 4: Line 11:
 
'''UART''' stands for '''U'''niversal '''A'''synchronous '''R'''eceiver '''T'''ransmitter.  There is one wire for transmitting data, and one wire to receive data.  A common parameter is the baud rate known as "bps" which stands for '''b'''its '''p'''er '''s'''econd.  If a transmitter is configured with 9600bps, then the receiver must be listening on the other end at the same speed.
 
'''UART''' stands for '''U'''niversal '''A'''synchronous '''R'''eceiver '''T'''ransmitter.  There is one wire for transmitting data, and one wire to receive data.  A common parameter is the baud rate known as "bps" which stands for '''b'''its '''p'''er '''s'''econd.  If a transmitter is configured with 9600bps, then the receiver must be listening on the other end at the same speed.
  
UART is a serial communication, so bits must travel on a single wire.  If you wish to send a '''char''' over UART, the char is enclosed within a '''start''' and a '''stop''' bit, so to send 8-bits of '''char''' data, it would require 2-bit overhead; this 10-bit of information is called a '''UART frame'''.  Let's take a look at how the character 'A' is sent over UART.  In ASCII table, the character 'A' has the value of 65, which in binary is: 0100.0101 If you inform your UART hardware that you wish to send this data at 9600bps, here is how the frame would appear on an oscilloscope :
+
UART is a serial communication, so bits must travel on a single wire.  If you wish to send a '''char''' over UART, the char is enclosed within a '''start''' and a '''stop''' bit, so to send 8-bits of '''char''' data, it would require 2-bit overhead; this 10-bit of information is called a '''UART frame'''.  Let's take a look at how the character 'A' is sent over UART.  In ASCII table, the character 'A' has the value of 65, which in binary is: 0100-0001.  If you inform your UART hardware that you wish to send this data at 9600bps, here is how the frame would appear on an oscilloscope :
 
[[File:uart_tutorial_frame.jpg|center|frame|UART Frame of 'A']]
 
[[File:uart_tutorial_frame.jpg|center|frame|UART Frame of 'A']]
  
 
A micrcontroller can have multiple UARTs in its hardware, and usually UART0 is interfaced to a "USB to serial" converter chip which is then connected to your computer.  In this exercise, you will write a driver for UART-2 and attempt to communicate between two boards.
 
A micrcontroller can have multiple UARTs in its hardware, and usually UART0 is interfaced to a "USB to serial" converter chip which is then connected to your computer.  In this exercise, you will write a driver for UART-2 and attempt to communicate between two boards.
 +
 +
I encourage you to fully read this article first, and here is a video about the UART0 tutorial.  This is a FAST PACED video, so learn to pause the video and look over your LPC user manual frequently :)  '''Note that I forgot to configure the PINSEL registers, which are covered by this tutorial below.'''
 +
*  [https://www.youtube.com/watch?v=RU_NUPprx2Y UART Driver Video]
  
 
<BR/>
 
<BR/>
Line 56: Line 66:
  
 
     LPC_UART0->LCR = (1 << 7); // Enable DLAB
 
     LPC_UART0->LCR = (1 << 7); // Enable DLAB
 +
    /* See the formula picture to get more info.
 +
    * Default values of fractional dividers simplifies the equation
 +
    * Warning: You need to set DLM/DLL correctly, but if divider is small enough, it will fit inside DLL
 +
    */
 
     LPC_UART0->DLM = 0;
 
     LPC_UART0->DLM = 0;
    /* See the formula picture to get more info.
 
    * Default values of fractional dividers simplifies the equation */
 
 
     LPC_UART0->DLL = CPU_CLOCK / (16 * 9600) + 0.5);
 
     LPC_UART0->DLL = CPU_CLOCK / (16 * 9600) + 0.5);
 +
 
     LPC_UART0->LCR = 3;        // 8-bit data
 
     LPC_UART0->LCR = 3;        // 8-bit data
 
}
 
}
Line 84: Line 97:
  
 
== Assignment ==
 
== Assignment ==
*  Locate the physical pins for a UART that is not already used by your board
+
* <b>Assignment Outline</b>
* Configure the PINSEL to use the pins for UART Rx/Tx
+
*: Form 2 people teams for this assignment.
* Initialize your UART at any baud rate
+
*: Write a driver for UART2 or UART3
* Write uart_putchar(char) and uart_getchar() functions
+
*: Do not use the pre-built driver or Uart2/3 class
* Interface your UART with someone else's board, and test the communication.
+
*: Connect your UART to your partner's UART (to his board)
 +
*: Prove that you can send/receive data across multiple boards.
 +
*: Upload Logic Analyzer Screenshot for the UART Frame.
 +
* <b>Extra Credit</b>:
 +
*: Use Uart interrupt to queue the received data to avoid polling. You just need to enable UART RX interrupt and then hookup an interrupt callback to do the receive.
 +
* <b>Steps</b>
 +
*: Locate the physical pins for a UART that is not already used by your board
 +
*: Configure the PINSEL to use the pins for UART Rx/Tx
 +
*: Initialize your UART at any baud rate
 +
*: Write uart_putchar(char) and uart_getchar() functions
 +
*: Interface your UART with someone else's board, and test the communication.
 +
-->

Latest revision as of 20:05, 25 January 2019

Socialledge is moving to two portals.

  • The Wiki will remain here for general references about the SJ-One board, and to document student reports.
  • The bookstack will now be used for SJSU assignments

This article has been moved here